/**
 *
 * Copyright 2003-2011 Simple Logo Viewer
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

package org.logo.viewer;

import java.util.Observable;

import org.logo.viewer.logo.exception.ParameterException;
import org.logo.viewer.logo.graphic.Azione;

/**
 * "PATTERN SINGLETON e "Osservato". E' la coda di stampa
 * 
 * @author Marco Speranza
 * @version 0.1
 */
public class LogoCodaStampa extends Observable {

	/**
	 *Instanza unica privata della classe Singleton
	 */
	private static LogoCodaStampa instanceOfLogoCS = null;
	public static boolean isRunning = true;

	/** Creates a new instance of LogoCodaStampa */
	private LogoCodaStampa() {
	}

	/**
	 * Crea un instanza di un pattern Singleton
	 * 
	 * @return Instanza della classe
	 */
	public static LogoCodaStampa makeLogoCodaStampa() {
		if (instanceOfLogoCS == null) {
			instanceOfLogoCS = new LogoCodaStampa();
		}
		return instanceOfLogoCS;
	}

	/**
	 * Appende un oggetto al vettore
	 * 
	 * @param obj
	 *            il comando che che si vuole eseguire
	 * @throws ParameterException
	 *             lanciata se il parametro non e' corretto
	 */
	public synchronized void push(Object obj) {

		if (obj instanceof Azione) {
			// e' cambiato lo stato della coda di stampa
			setChanged();
			// lo notifico all'interfaccia grafica
			notifyObservers(obj);
		}
	}

	/**
	 * @param b
	 */
	public synchronized void setRunning(boolean b) {
		isRunning = b;
	}

}
